/*********************************************************************************************************
**
**                                   GJB 标准测试集
**
**                               Copyright All Rights Reserved
**
**--------------文件信息--------------------------------------------------------------------------------
**
** 文   件   名: gjb_S0101801GN.c
**
** 文件创建日期: 2021 年 1 月 12 日
**
** 描        述: 网络设备管理功能测试。编制测试用例代码，实现对网络
**               设备的配置和管理，尤其是设置IP地址、子网掩码、网关。
**
**           同时可以使用命令修改IP地址, 掩码, 网关:
**           ifconfig  eth0  192.168.1.110 netmask 255.255.255.0 gateway 192.168.1.1
*********************************************************************************************************/

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <net/if.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

//int argc, char *argv[]
int main()
{
	int fd = 0;
	struct ifreq ifr = {0};	
	struct ifconf ifc = {0};
	int ret = 0;
	int i;
    uint8_t ip[4] = {192,168,8,1};

	memset(&ifr, 0, sizeof(ifr));
	// ifr.ifr_addr.sa_family = AF_INET;
    strncpy(ifr.ifr_name, "ens33", IFNAMSIZ);	/* �������� */
	
	/* ����socket������ */
	fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
	if (fd <= 0)
	{
		printf("create socket fd failed,%s\n", strerror(errno));
		return -1;
	}

    //����IP����
    ifr.ifr_addr.sa_family = AF_INET;
    struct sockaddr_in *addr = (struct sockaddr_in *)&(ifr.ifr_addr);
    memcpy(&(addr->sin_addr.s_addr), ip, 4);

    ret = ioctl(fd, SIOCSIFADDR, &ifr);
	if (ret < 0)
	{
		printf("ioctl failed,%s\n", strerror(errno));
		goto __exit;
	}

__exit:
	if (fd != 0)
	{
		close(fd);
	}
    return ret;
}

